void main(){
  /*
      1、全局变量特点:全局变量常驻内存、全局变量污染全局
      2、局部变量的特点:不常驻内存会被垃圾机制回收、不会污染全局
  */ 

    // 你会发现，fun执行几次，全局作用域里的a就会被累加几次，这就是全局变量的缺点，会常驻内存
    var a = 1;
    var fun = (){
      a++;
    };
    fun();
    fun();
    fun();
    print(a);

    // 现在问题来了，如果我想不用全局变量，想让函数作用域里的数据常驻呢？这就要利用到闭包了
    out(){
      var b = 123;
      return (){
        // 内部函数对于外部函数中变量的引用，会使该变量不会被回收，常驻在内存中
        b++;
        print(b);
      };
    }
    var test = out();
    // 你会发现test调用了三次，out的作用域中的b变量一直在累加，没有被回收
    test();
    test();
    test();
}